草庐IT

带指针的 C++ vector

全部标签

c++ - 具有指向其父对象的指针的对象是否应该定义复制构造函数?

如果一个对象A包含一个成员对象B,并且对象B有一个指向其父对象A的指针,我是否需要为对象B指定一个复制构造函数?假设没有动态分配。此外,3的规则是否适用于此? 最佳答案 您的设计使用双向导航实现组合。这可能是完全有效的。然而,正如谢尔盖在评论中指出的那样,这样的设计并非没有问题。假设你有一个类Object和一类Container包含Object.这里有一些基本问题:Containerc;Objectmo1;//Q1:shouldthisbevalid?(i.e.isanobjectwithoutparentallowedObject

c++ - 在以抽象基类为参数的函数中将指针和赋值运算符与派生类一起使用

我有一个函数(modShape),它接受一个抽象基类(Shape)作为参数;在函数中,我想制作输入对象的拷贝,修改拷贝,然后将拷贝重新分配给输入对象,以便修改保留在modShape的范围之上。我已经设置了一个clone()成员函数来制作初始拷贝,它似乎运行良好。接下来,我使用doubleArea()成员函数修改拷贝,并尝试将其复制回输入对象。基类和派生类在header.h中定义:#ifndefHEADER_H_#defineHEADER_H_#include#includeusingnamespacestd;//Abstractbaseclass.classShape{public:/

c++ - MPI 在 C++ 中发送具有 vector 属性的结构

我想发送一个具有vector属性的结构。typedefstruct{intid;vectorneighbors;}Node;我知道我必须创建一个MPI派生数据类型,如thisanswer,但我不知道在我的情况下该怎么做,因为我在结构中有一个vector。 最佳答案 如果你想保持高水平并发送对象,那么Boost.MPI是个不错的选择。使用Boost.MPI,您可以为结构指定高级序列化。您不能(正确地)静态确定vector数据成员的偏移量。拼凑出一个有效的类型当然是可能的。但这也是搬起石头砸自己脚的好方法。您会在代码中引入假设(例如,v

c++打包和解包参数包以在没有STL的情况下调用匹配的函数指针

我正在尝试创建一个类,该类将存储指向具有可变数量参数的函数的指针,并在稍后调用它。想法是为函数创建一个包装器,该函数将在对象析构时调用所述函数。这样我就可以确保在退出某些功能后进行一些清理。我现在拥有的是FaheemMitha发布的一点修改代码here.这是带有示例的工作代码(我正在使用VisualStudio2015编译它):#include"stdafx.h"#include#includeusingnamespacestd;templatestructseq{};templatestructgens:gens{};templatestructgens{typedefseqtype

c++ - 将函数指针实现替换为 std::function 以在 PlayFab SDK 中使用 lambda

我目前正在尝试包含PlayFabC++SDK进入我的应用程序。该SDK主要针对游戏引擎Cocos2d-x,但基本上可以用于任何C++应用。它只是普通的REST,因此您向他们的服务器发送请求并等待响应。这非常适合使用lambda。他们声明了这个回调,当请求成功时调用:templateusingProcessApiCallback=void(*)(constResType&result,void*userData);不幸的是,他们没有使用std::function,而是一个函数指针。这样就不能使用捕获变量的lambda。因此,我想我可以简单地用std::function回调替换这个函数指针

C++ 在结构定义中初始化一个 vector

我正在阅读编程原理和实践C++,并遇到了以下我认为没有得到很好解释的代码structDay{vectorhour{vector(24,-777)};};这里发生了什么?当我需要一个具有默认值的特定长度的vector时,我通常使用这个初始化器:vectorhour(24,-777);但是,这种初始化方式在结构内部不起作用,structDay{vectorhour(24,-777);};导致编译错误Error(active)expectedatypespecifierHelloWorldd:\VisualStudio2015\HelloWorld\HelloWorld\HelloWorld

c++ - 返回填充在函数内部的 const char* vector 是否是明确定义的行为

我目前正在学习vulkan。在其中一个教程中,我看到了一个大致执行以下操作的函数:#defineSOMESTRING"HelloWorld!"std::vectorbuildVector(){std::vectorvec;vec.push_back(SOMESTRING);returnvec;}当我看到这个时,我想知道:这是定义的行为吗?字符串"HelloWorld!"的内容不是位于堆栈中,因此一旦函数返回就无效了吗?如果这是未定义的行为,那么正确的方法是什么?不幸的是,由于vulkanAPI,无法使用std::string。 最佳答案

c++ - 我应该在 v8::External 中手动删除指针吗?

Localtpl=ObjectTemplate::New(isolate);tpl->SetInternalFieldCount(1);Localret=tpl->NewInstance();TestExternal*ex=newTestExternal();ret->SetInternalField(0,External::New(isolate,ex));当ret不再使用时,我是否应该手动删除ex指针?表明我应该或不应该这样做的证据源代码在哪里? 最佳答案 是的,C++需要手动内存管理:如果您使用new手动创建一个对象,那么您还

c++构造函数似乎每次都返回指向同一对象的指针

这个问题在这里已经有了答案:Canalocalvariable'smemorybeaccessedoutsideitsscope?(20个答案)关闭5年前。我有一个链表类的简单实现,它有指向我也定义的Node对象的指针。函数insertHead创建一个新节点并将其插入到头部。但是,每当我调用该函数时,构造函数似乎每次都返回指向同一对象的指针。(我使用GDB检查过)我在这里粘贴代码片段。如果出现问题,有人可以告诉我吗?voidLinkedList::insertHead(intval){Nodetemp(val);if(head==NULL){head=tail=&temp;}else{

c++ - 当指针对象有可选参数时如何传递函数指针?

我试图将函数指针作为另一个函数的参数传递,但函数指针本身可能有也可能没有参数(这使其与我搜索的其他问题不同)。代码按原样工作,但我的问题是我试图使用单个函数并传入每个不同的函数指针,但我下面有3个不同的函数来传递每个函数指针。我想摆脱3个不同的函数定义,因为它们除了传入的函数指针外都是相同的(所以基本上是execute_func()定义的3个拷贝)。到目前为止,这是我所拥有的,但这似乎不正确,我应该需要三个execute_func()调用。classA{...};classB{...};classTest{private:std::functionfp;std::functionfp;